1.4 8051微 控制器存储器组织
在之前的8051单片机教程中,我们已经了解了8051单片机的介绍与基础知识、引脚图、引脚描述以及架构概述。在本教程中,我们将继续深入探讨8051单片机,通过理解其存储器组织(Memory Organization)、程序存储器(Program Memory,即ROM)、数据存储器(Data Memory,即RAM)以及外部存储器的连接方式。
在之前的教程中提到微处理器与微控制器的区别时,主要区别可以归结为片上存储器(on-chip memory)。微控制器在同一芯片(IC)上集成了程序存储器(ROM)和数据存储器(RAM),而微处理器需要外部连接存储器模块。
因此,存储器是8051单片机架构(事实上,任何微控制器)的重要组成部分。因此,理解8051单片机的存储器组织至关重要,即存储器是如何组织的,处理器如何访问每种存储器,以及如何将外部存储器与8051单片机连接。
在深入探讨8051单片机存储器组织的细节之前,我们先简要了解计算机架构,然后再继续探讨8051单片机的存储器组织。
计算机架构的类型
本质上,微处理器或微控制器是根据两种类型的计算机架构进行分类的:冯·诺依曼架构(Von Neumann Architecture)和哈佛架构(Harvard Architecture)。
冯·诺依曼架构
冯·诺依曼架构(或普林斯顿架构)是一种计算机架构,在这种架构中,程序(即指令)和数据被存储在同一 存储器中,作为存储器组织的一部分。
由于指令存储器和数据存储器是相同的,处理器或CPU无法同时访问指令和数据,因为它们使用同一个总线。
这种架构对系统的性能有严重的限制,因为它在访问存储器时会产生瓶颈。

哈佛架构
与冯·诺依曼架构相反,哈佛架构的存储器组织使用单独的存储器用于指令(程序)和数据。由于在哈佛架构中指令存储器和数据存储器是分开的,它们的信号路径(即总线)也是不同的,因此CPU可以同时访问指令和数据。
几乎所有微控制器,包括8051单片机,都实现了哈佛架构。

8051单片机存储器组织
8051单片机的存储器被分为程序存储器(ROM)和数据存储器(RAM)。8051单片机的程序存储器用于存储要执行的程序,即指令。而数据存储器则用于存储临时变量数据和中间结果。
8051单片机具有内部ROM和内部RAM的存储器组织。如果内部存储器不足,可以通过合适的电路添加外部存储器。
8051单片机的程序存储器(ROM)
在这种8051单片机的存储器组织中,要执行的代码或指令被存储在程序存储器中,这也被称为单片机的ROM。英特尔最初的8051单片机具有4KB的内部ROM。
一些8051的变种,如8031和8032系列,没有任何内部ROM(程序存储器),必须与加载了指令的外部程序存储器连接。
几乎所有的现代8051单片机,如8052系列,都具有8KB的内部程序存储器(ROM),以闪存的形式存在,并提供了重新编程存储器的选项。

在8051的4KB内部ROM存储器组织中,地址空间为0000H到0FFFH。如果地址空间,即程序地址超出这个值,那么CPU将自动从外部程序存储器中获取代码。

为此,外部访问引脚(EA引脚)必须被拉高,即当EA引脚为高电平时,CPU首先从内部程序存储器中获取地址范围为0000H到0FFFFH的指令,如果存储器地址超出限制,则从外部ROM中地址范围为1000H到FFFFH的区域获取指令。
还有另一种获取指令的方式:忽略内部ROM,仅从外部程序存储器(外部ROM)获取所有指令。在这种情况下,EA引脚必须连接到地(GND)。在这种情况下,外部ROM的存储器地址将从0000H到FFFFH。

8051单片机的数据存储器(RAM)
8051单片机的数据存储器或RAM用于存储在单片机正常运行期间生成和使用的临时数据和中间结果。英特尔最初的8051单片机具有128字节的内部RAM。
但几乎所有现代8051单片机的变种都具有256字节的RAM。在这256字节中,前128字节,即从00H到7FH的存储器地址被分为工作寄存器(作为寄存器组组织)、可位寻址区域和通用RAM(也称为暂存区)。
在RAM的前128字节(从00H到7FH)中,前32字节,即从00H到1FH的存储器地址包含32个工作寄存器,这些寄存器被分为四个组,每组有8个寄存器。

这四个组分别命名为Bank0、Bank1、Bank2和Bank3。每个组包含8个寄存器,命名为R0到R7。每个寄存器可以通过名称或地址两种方式来寻址。
要通过名称寻址寄存器,首先必须选择相应的组。为了选择组,我们需要使用程序状态字(PSW)寄存器的RS0和RS1位(RS0和RS1是PSW寄存器中的第3位和第4位)。
当使用地址(例如12H)来寻址寄存器时,相应的组可能被选中,也可能没有被选中。(12H对应于Bank2中的R2)。
接下来的16字节RAM,即从20H到2FH,是可位寻址的存储器位置。总共有128位可以使用00H到7FH单独寻址,或者整个字节可以被寻址为20H到2FH。
例如,在8051单片机的存储器组织中,32H是内部RAM位置26H的第2位。
最后80字节的内部RAM,即从30H到7FH的地址,是通用RAM区域,这些区域是按字节寻址的。
这些低128字节的RAM可以直接或间接寻址。
RAM的上128字节,即从80H到FFH的存储器地址被分配给特殊功能寄存器(SFRs)。SFRs控制8051单片机的特定功能。其中一些SFRs包括I/O端口寄存器(P0、P1、P2和P3)、PSW(程序状态字)、A(累加器)、IE(中断使能)、PCON(电源控制)等。

SFRs的存储器地址只能直接寻址。尽管在80H到FFH之间的一些地址没有分配给任何SFR,但它们不能被用作额外的RAM区域。
在某些微控制器中,还有一个额外的128字节的RAM,它与SFRs共享存储器地址,即80H到FFH。但是,这个额外的RAM块只能通过间接寻址访问。
将外部存储器与8051单片机连接
能够扩展微控制器的能力,无论是存储器、I/O还是其他方面,总是一件好事。这种扩展有助于避免设计瓶颈。我们已经看到,典型的8051单片机具有4KB的ROM和128字节的RAM(大多数现代8051单片机变种具有8KB的ROM和256字节的RAM)。
基于8051单片机的系统设计者并不局限于8051存储器组织中存在的内部RAM和ROM。可以连接多达64KB的程序存储器(ROM)和数据存储器(RAM)。
连接外部程序存储器或ROM的原因是,用高级语言编写的复杂程序往往较大,占用更多存储器。
另一个重要原因是,像8031或8032这样的芯片,它们没有任何内部ROM,必须与外部ROM连接。
最多可以将64KB的程序存储器(ROM)和64KB的数据存储器(RAM)与8051单片机连接。
下图展示了将64KB的外部RAM和64KB的外部ROM与8051单片机连接的方框图。

在将外部存储器与8051单片机连接时,需要记住的一个重要点是,端口0(P0)不能用作I/O端口,因为它将用于复用地址和数据总线(A0-A7和D0-D7)。虽然不总是这样,但端口2可能会用作地址总线的高字节。
在本教程中,我们已经了解了8051单片机的存储器组织,包括程序存储器、